歡迎來到第二章!在第一章中,我們已經從零到有,打造了一個功能完整、架構合理的鬧鐘 App。
在命令 AI 為我們寫東西、畫圖、甚至控制我們的 App 之前,我們必須先做一件最重要的事情,那就是向 AI 證明我們的身份。這就需要用到我們的API Key。
困惑點:什麼是 API Key?直接貼在程式碼裡安全嗎?當我準備連接 AI 服務時,我發現所有教學都提到需要一組「API Key」。要去哪裡申請? 我該如何存放它?
AI協作
我準備要串接 AI 服務了,但我對 API Key 感到很困惑。請問什麼是 API Key,為什麼需要它,以及我可以在哪裡免費申請到一個?另外,直接把 Key 寫在 Swift 程式碼裡好像很危險,請問在 Xcode 專案中有沒有比較簡單又安全的存放方法?請簡單說明並不用給程式碼
AI 的回答:
您好,很高興能為您解答關於 API Key 的問題。這在資訊工程領域是個非常重要且基礎的概念。
什麼是 API Key?
API Key (應用程式介面金鑰) 就像是您使用某個網路服務的「身分證」或「通行證」。當您的應用程式要呼叫一個外部的 AI 服務 (例如:Google AI、OpenAI 等),這個 Key 就是用來驗證您的身分,讓服務提供商知道是誰在使用他們的服務。
這個 Key 通常是一串獨特的字串,例如
sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
。
為什麼需要它?
需要 API Key 的主要原因有三個:
- 身分驗證 (Authentication):確保只有授權的用戶或應用程式能存取服務。這能防止未經授權的存取和濫用。
- 存取控制 (Access Control):服務提供商可以根據您的 Key 來管理您可以使用的功能或資源。例如,某些 Key 可能只能讀取資料,而另一些則可以寫入。
- 使用量追蹤 (Usage Tracking):服務提供商能透過 Key 來追蹤您的使用量。這對於計費 (例如:按使用量收費) 和分析服務的效能都非常重要。
如何免費申請 API Key?
許多大型 AI 服務提供商都提供免費的 API Key 額度,讓開發者能夠先測試和開發。您可以到以下這些平台的官網註冊並申請:
- Google AI Studio (Google):提供免費的 Gemini API Key。
- OpenAI:提供部分免費的 API 額度。
- Hugging Face:提供多種開源模型和服務,部分可免費使用。
請注意:這些免費額度通常會有使用限制,例如每月請求次數或每分鐘請求頻率的上限。
在 Xcode 中安全存放 API Key 的方法
您觀察到直接將 API Key 寫在程式碼中是很危險的,這是非常正確的觀念。因為這樣做會將 Key 暴露在公開的程式碼中 (例如當您將專案上傳到 GitHub 時),可能被惡意人士盜用,導致您的帳號產生額外費用。
在 Xcode 專案中,有幾種相對簡單又安全的存放方法,它們的核心思想都是將 Key 從程式碼中分離:
- 使用
.xcconfig
檔案:這是一個 Xcode 的設定檔,您可以將 Key 定義在裡面,然後在專案的 Build Settings 中引用。這樣 Key 就不會直接出現在您的 Swift 程式碼裡。- 使用環境變數 (Environment Variables):您可以在 Xcode 專案的 Scheme 設定中,為不同的環境 (例如:Debug 或 Release) 設定不同的環境變數,並將 Key 存在這些變數中。程式運行時可以透過
ProcessInfo.processInfo.environment
讀取這些值。- 使用 Keychains:這是最安全的選擇之一。macOS 和 iOS 的 Keychains 是專門用來安全存放敏感資料的服務,例如密碼、憑證等。雖然操作上會比前兩者複雜一點,但它提供了作業系統等級的保護,即使應用程式被反編譯,Key 也難以被竊取。
總結來說,我建議您可以先從
.xcconfig
或 環境變數 開始,這兩者都相對容易實作,能有效防止 Key 被意外暴露。等到您的專案需要更高層級的安全保護時,再考慮使用 Keychains。
API_KEY.plist
檔案:在 Xcode 中建立一個屬性列表檔案,專門用來存放我們的金鑰。.gitignore
:告訴 Git 「不准碰」我們的金鑰檔案,這是最重要的一步。Service
層),安全地從 .plist
檔案中讀取出金鑰。首先,我們需要前往 Google AI Studio 網站來產生免費的開發金鑰。
打開瀏覽器,前往 aistudio.google.com。
使用您的 Google 帳號登入。
登入後,點擊頁面左下角的 「Get API key」 按鈕。
在彈出的視窗中,點擊 右上角「Create API key 」,並選擇Gemini API
畫面會顯示一組長長的亂碼,就是你的 API Key!點擊旁邊的複製按鈕,下一步會用到。
API_KEY.plist
檔案回到 Xcode 專案。
在專案的根目錄按右鍵,選擇 New File...
。
在篩選框中輸入 Property List
,然後選擇 Property List 模板,點擊 Next
。
將檔案命名為 API_KEY.plist
,並儲存。
打開這個新檔案,點擊「+」按鈕新增一個 Key,將其命名為 GeminiAPIKey
(你可以自訂),Type
設為 String
,並在 Value
欄位中貼上你剛剛複製的金鑰。
.gitignore
(極度重要!)為了防止金鑰被上傳,我們必須告訴 Git 忽略這個檔案。
在專案的根目錄(最上層藍色圖示那層)找到 .gitignore
檔案(如果沒有,請手動建立一個純文字檔並命名為 .gitignore
)。
打開它,在檔案的最後加上新的一行:
# Secret Keys
API_Keys.plist
這是最直接的一步。我們不需要任何複雜的設定,就可以在需要的地方(例如我們未來會建立的 Service
層)寫一個函式來讀取它。
這是一個讀取金鑰的範例函式:
class GeminiAPIService {
private let networkManager = NetworkManager.shared
private let apiKey: String
init() {
// 從 API_KEY.plist 安全地讀取金鑰
guard let path = Bundle.main.path(forResource: "API_KEY", ofType: "plist"),
let dict = NSDictionary(contentsOfFile: path),
let key = dict["GeminiAPIKey"] as? String else {
fatalError("無法在 API_KEY.plist 中找到 GeminiAPIKey")
}
self.apiKey = key
}
}
這個方法完成了從檔案讀取到驗證的所有工作,讓金鑰管理變得簡單又安全。
今天我們沒有寫任何主要的功能,卻完成了至關重要的一步。
明天,我們會用 async/await
寫下第一行與 AI 對話的程式碼!